/*
 * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang;

/**
 * 当应用程序尝试使用表示类型名称的字符串访问类型，但找不到具有指定名称的类型定义时抛出。
 * 此异常与 {@link ClassNotFoundException} 的不同之处在于 <tt>ClassNotFoundException</tt>
 * 是受检异常，而此异常是非受检异常。
 *
 * <p>请注意，此异常不仅可以在访问未定义的类型变量时使用，
 * 也可以在加载类型（例如，类、接口或注解类型）时使用。
 * 特别是，此异常可以由 {@linkplain java.lang.reflect.AnnotatedElement
 * 用于反射读取注解的 API} 抛出。
 *
 * @author  Josh Bloch
 * @see     java.lang.reflect.AnnotatedElement
 * @since 1.5
 */
public class TypeNotPresentException extends RuntimeException {
    private static final long serialVersionUID = -5101214195716534496L;

    private String typeName;

    /**
     * 为指定的类型构造一个带有指定原因的 <tt>TypeNotPresentException</tt>。
     *
     * @param typeName 不可用类型的完全限定名
     * @param cause 当系统尝试加载指定类型时抛出的异常，
     *              如果不可用或不适用则为 <tt>null</tt>
     */
    public TypeNotPresentException(String typeName, Throwable cause) {
        super("Type " + typeName + " not present", cause);
        this.typeName = typeName;
    }

    /**
     * 返回不可用类型的完全限定名。
     *
     * @return 不可用类型的完全限定名
     */
    public String typeName() { return typeName;}
}
